let spread = [12, 5, 8, 8, 130, 44,130]
let filtered = spread.filter((item, idx, arr) => {
  return arr.indexOf(item) === idx;
})
console.log('数组去重结果', filtered)

// let od = document.body.scrollHeight;
// window.onresize = function(){
// 	console.log('od', od, 'document.body.scrollHeight', document.body.scrollHeight);
// 	if (document.body.scrollHeight === od) {
// 		alert('block');
// 	} else {
// 		alert('none');
// 	}
// }


// function f() {
// 	return new Promise((resolve, reject) => {
// 		setTimeout(() => {
// 			console.log('resolved');
// 			resolve('我是一些数据');
// 		}, 2000);
// 	})
// }

// async function doSomeThing() {
	//等待1完成才会开始2，2完成才会去console
	// let d1 = await f();
	// let d2 = await f();
	// return await Promise.all([f(), f()]);//一次性开始1和2，再console
	// console.info(0, d1);
	// console.info(1, d2);
// }

// async function doxx(){
// 	await doSomeThing();
// 	console.info('do');
// }

// doxx();
// kendo取数规则快速填充方法
// var kendoDataHasRgl = $('#spreadsheet').data('kendoSpreadsheet');
// var kendoDataHasFormula = $('#spreadsheet1').data('kendoSpreadsheet');

// var kendoJosnHasRgl = kendoDataHasRgl.toJSON();
// var kendoJosnHasFormula = kendoDataHasFormula.toJSON();

// //遍历表格
// console.time('format');
// for (var k = 0; k < kendoJosnHasRgl.sheets.length; k++) {
// 	var sheet = kendoJosnHasRgl.sheets[k];
// 	//遍历表格的行
// 	for(var i = 0; i < sheet.rows.length; i++){
// 		//遍历表格的行的每个单元格
// 		for (var j = 0; j < sheet.rows[i].cells.length; j++) {
// 			var regular = sheet.rows[i].cells[j].value;
// 			//  /^\{\".*\"\:\s*\".*\"\}$/gi.test('{"getPreVal":"main_10-YBXMBNLJ"}')
// 			regular&& typeof regular === 'string'&& regular.replace(/^\{\"(.*)\"\:\s*\"(.*)\"\}$/gi, (match, p1, p2) => {
// 				if (p1 !== '' && p2 !== '') {
// 					var tmsCellFlag = new Object();
// 					tmsCellFlag[p1] = p2;

// 					kendoJosnHasFormula.sheets[k].rows[i].cells[j].tmsCellFlag = tmsCellFlag;//植入规则对象
// 					// kendoDataHasFormula.sheets[k].rows[i].cells[j].value = '';//文字为空字符
// 					kendoJosnHasFormula.sheets[k].rows[i].cells[j].background = '#ff0000';//背景为白色

// 					console.info(`替换发生在第${k}个sheet的第${i}行的第${j}个单元格。`);
// 					console.info(`植入的取数规则为：${regular}`);
// 					console.info('------------------------------------------------------');
// 				}
// 			});
// 		}
// 	}
// }
// console.timeEnd('format');
// kendoDataHasFormula.fromJSON(kendoJosnHasFormula);

// {"savePreVal":"main_36-YBXMBNLJ"}

// function A() {
// 	this.name = 'mark';
// 	this.age = 21;
// 	console.log(this);
// }

// A.prototype = {
// 	init: function() {
// 		console.log(this.name);
// 	},
// 	name: function(){

// 	}
// }

//console.log(new A().init());
// let sum = [0, 1, 2, 3].reduce(function(acc, val) {
//   return acc + val;
// }, 0);

// console.log(sum);
// // 6

// let list1 = [[0, 1], [2, 3], [4, 5]];

// let list2 = [0, [1, [2, [3, [4, [5, [6]]]]]]];

// const flatten = (arr) => {
//     return arr.reduce(
//         (acc, val) => {
//         	debugger
//             return acc.concat(Array.isArray(val) ? flatten(val) : val)
//         }, []
//     );
// };

// let _list1 = flatten(list1); 
// console.log(_list1);
// // [0, 1, 2, 3, 4, 5]

// let _list2 = flatten(list2); 
// console.log(_list2);
// [ 0, 1, 2, 3, 4, 5, 6 ]

// let o = {};
// Object.defineProperty(o, 'name',{
// 	get:function () {
// 		return 'xxx'
// 	},
// 	set:function () {
// 		console.log('yyy');
// 	}
// })
// console.log(o.name);
// o.name = 'bbb';
// console.log(o.name);
// Object.assign方法用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）。
// Object.assign方法的第一个参数是目标对象，后面的参数都是源对象。

// var target = { a: 1 };

// var source1 = { b: 2 };
// var source2 = { c: 3 };

// Object.assign(target, source1, source2);
// console.log(target); // {a:1, b:2, c:3}

// const声明一个只读的常量。一旦声明，常量的值就不能改变。
// ES6新增了let命令，用来声明变量。它的用法类似于var，但是所声明的变量，只在let命令所在的代码块内有效。

// rest 参数搭配的变量是一个数组，该变量将多余的参数放入数组中。
// function add(...values) {
//   let sum = 0;

//   for (var val of values) {
//     sum += val;
//   }

//   return sum;
// }

// add(2, 5, 3) // 10

// 扩展运算符（spread）是三个点（...）。它好比 rest 参数的逆运算，将一个数组转为用逗号分隔的参数序列。
// function push(array, ...items) {//rest 参数items
//   array.push(...items);//扩展运算符（spread）items
// }

// function add(x, y) {
//   return x + y;
// }

// var numbers = [4, 38];
// add(...numbers) // 42

//写出不能独立使用、必须继承后才能使用的类。
// class Shape {
// 	constructor(){
// 		if(new.target === Shape){
// 			throw new Error('本类不能实例化');
// 		}
// 	}
// }

// class Rectangle extends Shape{
// 	constructor(length,width){
// 		super();
// 		//...
// 	}
// }
// var x = new Shape();//error
// var y = new Rectangle(3,4);


// class Rectangle{
// 	constructor(length, width){
// 		console.log(new.target === Rectangle);
// 		this.length = length;
// 		this.width = width;
// 	}
// }

// var obj = new Rectangle(3,4);

// var a = [25];
// var b = [22,24,25].filter(function(age) {
// 	if(a.indexOf(age) === -1){
// 		return age;	
// 	}
// });

//console.log(b)
// var d = null,
// 	dateArray = [];

// for(var i = 0, length1 = 12; i < length1; i++){
// 	d = new Date();
// 	d.setMonth(i);
// 	dateArray.push(d);
// }

// console.log(dateArray.length);
// console.log(dateArray);

// function fun(num) {
// 	if (num <= 1) {
// 		return 1;
// 	} else {
// 		return num * arguments.callee(num -1);
// 	}
// };
// console.info(fun(5));
// function outer() {
// 	inner();
// }

// function inner() {
// 	alert(arguments.callee.caller);
// }

// outer()
// var s = [1,2,3];
// s.splice(1, 1)
// console.info(s);

// var num = 10;
// console.log(num.toString(2))

// var text = 'cat, bat, sat, fat'
 //console.info((text.match(/(.at)/g))[0])
// result = text.replace(/(.at)/g, 'word($1)');
// console.log(result)

// function htmlEscape(text) {
// 	return text.replace(/[<>"&]/g, function (match, pos, originalText) {
// 		debugger
// 	})
// }

// var text = '你好'
// console.info(text.charCodeAt(1))
// console.log(String.fromCharCode(22909))

// var p = {};
// Object.defineProperty(p, 'name', {
// 	writable:false,
// 	value:'Nicholas'
// });
// console.log(p.name);
// p.name = 'mark';
// console.log(p.name);

// var book = {
// 	_year: 2004,
// 	edition:1
// };

// Object.defineProperty(book, 'year', {
// 	get: function () {
// 		return this._year;
// 	},
// 	set: function (newValue) {
// 		if(newValue > 2004){
// 			this._year = newValue;
// 			this.edition += newValue - 2004;
// 		}
// 	}
// })
// book.year = 2005;
// console.log(book.edition);
// console.log(book.year);

// function Person() {
// }
// console.info(Person.prototype)

//寄生组合式继承
// function inheritPrototype(subType, superType) {
// 	var prototype = Object(superType.prototype);
// 	prototype.constructor = subType;
// 	subType.prototype = prototype;
// }
// function SuperType(name) {
// 	this.name = name;
// 	this.color = ['red','blue', 'green'];
// }

// SuperType.prototype.sayName = function () {
// 	console.log(this.name);
// }

// function SubType(name,age) {
// 	SuperType.call(this, name);
// 	this.age = age;
// }

// inheritPrototype(SubType, SuperType);

// SubType.prototype.sayAge = function(){
// 	console.log(this.age);
// };

// var num = 0;
// outermost:
// for (var i = 0; i < 10; i++) {
// 	for (var j = 0; j < 10; j++) {
// 		if(i == 5 && j == 5){
// 			break outermost;
// 		}
// 		num++;
// 	}
// }
// console.log(num);
// console.log(i);
// console.log(j);

// var f = function (obj) {
// 	obj.name = 'Mark';
// 	obj = new Object();
// 	obj.name = 'Greg';
// }
// var p = new Object();
// f(p);
// console.log(p.name);

// var factorial = (function f(num) {
// 	if (num <= 1) {
// 		return 1;
// 	} else {
// 		return num* f(num-1);
// 	}
// })

// console.log(factorial(5));
// function createFunction() {
// 	var rz = new Array();
// 	for (var i = 0; i < 10; i++) {
// 		rz[i] = function (num) {
// 			return i;
// 		}
// 	}
// 	return rz;
// }

// console.log(createFunction()[0]())

// try {
// 	throw new Error('my message')
// } catch(e) {
// 	console.log(e);
// }

// var book = {
// 	"title":"Javascript",
// 	"price":11,
// 	toJSON : function () {
// 		return this;
// 	}
// }
// var jsonText = JSON.stringify(book,function (key, value) {
// 	switch (key) {
// 		case 'title':
// 			return value + '加的';
// 			break;
// 		default:
// 			return value;
// 			break;
// 	}
// }, 4);
// console.log(jsonText)
// console.log(typeof jsonText)

// var json = JSON.parse(jsonText,function (key, value) {
// 	switch (key) {
// 		case 'title':
// 			return value.substring(0,10);
// 			break;
// 		default:
// 			return value;
// 			break;
// 	}
// });
// console.log(json);
// console.log(typeof json);

//查询url构建
// function addUrlParam(url, name, value) {
// 	url += (url.indexOf('?') == -1 ? '?': '&');
// 	url += encodeURIComponent(name) + '=' + encodeURIComponent(value);
// 	return url;
// }
// var url1 = addUrlParam('www.baidu.com', 'name', '中文');
// console.log(url1);

// var url2 = addUrlParam(url1, 'time', '2016-10-21 10:22:22');
// console.log(url2);

//函数柯里化
// function curry(fn) {
// 	var args = Array.prototype.slice.call(arguments, 1);
// 	return function () {
// 		var innerArgs = Array.prototype.slice.call(arguments);
// 		var finalArgs = args.concat(innerArgs);
// 		return fn.apply(null, finalArgs);
// 	}
// }

// function add(num1, num2) {
// 	return num1 + num2;
// }

// var curriedAdd = curry(add, 5);
// console.log(curriedAdd(3));
// var data = '475A4A5030327C327C313436333133313531323633363939347CC0EEBCD37C3332313331323331323331323331333332337C333137353633353831363633383834357CB9E3D6DDCAD0D5E6B1B1BBFAB6AFB3B5C5E0D1B5BBFAB9B9';
// var getZero = function(length) {
// 		var str = '';
// 		for (var i = 0; i < length; i++) {
// 			str += '0';
// 		}
// 		return str;
// 	}

// 	var getBlockArray = function (data) {
// 		var dataArry = [],
// 			startPst = 0,
// 			tmpData = '';

// 		while (startPst < data.length) {
// 			tmpData = data.substr(startPst,32);
// 			tmpData += getZero((32-tmpData.length));
// 			dataArry.push(tmpData);
// 			startPst += 32; 
// 		}

// 		return dataArry;
// 	}
// var dataarry = getBlockArray(data);
// console.log(dataarry)
// console.log('475A4A5030327C327C31343633313331'.length)

// function r(num) {
// 	var tmp = Math.abs(num),
// 		rz = parseInt(tmp.toString().split('').reverse().join(''), 10);
// 	return num<0?-rz:rz
// }
// console.log(r(-100))
// 
// 
// 
// 



// Date.prototype.Format = function(fmt) {
// 		var o = {
// 			"M+": this.getMonth() + 1, //月份
// 			"d+": this.getDate(), //日
// 			"h+": this.getHours(), //小时
// 			"m+": this.getMinutes(), //分
// 			"s+": this.getSeconds(), //秒
// 			"q+": Math.floor((this.getMonth() + 3) / 3), //季度
// 			"S": this.getMilliseconds() //毫秒
// 		};
// 		if(/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
// 		for(var k in o)
// 			if(new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
// 		return fmt;
// }

// var d = new Date();

// var day = d.getDate() -1;

// d.setDate(day);

// console.log(d.Format('yyyy-MM-dd hh:mm:ss'));

// var o = {
// 	a:1,
// 	b:2,
// 	c:{
// 		d:function () {
// 			alert('xxxx');
// 			console.log(this.e);
// 		},
// 		e:6
// 	}
// }
// o.c.d()
// 

// var sign = function (fn) {
// 	var rz = null;
// 	return function () {
// 		return rz || (rz = fn.apply(this, arguments))
// 	}
// }

// var createMask = sign(function () {
// 	return document.body.appendChild(document.createElement('div'))
// })
// var maskDiv = createMask();


// function doRemoval(array){
// 	if (!(array instanceof Array)) {
// 		throw new Error('类型错误！');
// 	}
// 	if (array.length === 0) {
// 		return [];
// 	}
// 	var rz = [];
// 	for(var k = 0, length3 = array.length; k < length3; k++){
// 		rz.indexOf(array[k]) === -1? rz.push(array[k]): '';
// 	}
// 	return rz;
// }
// console.log(doRemoval([1,2,2,3,4,4,6]));
